package com.szrt.day20161014;

import java.util.Scanner;

import org.junit.Test;

public class HomeWorkDemo {
	
	
	
	/**
	 * 水仙花数：
	 * 
	 * 我们不需要掌握复杂的 算法  数据结构   C
	 * 熟练掌握怎么调用：  熟练掌握百度
	 * 
	 * 
	 * 需求： 最少3位   他们百位的立方  + 十位的立方 + 各位的立方  = 数身
	 */
	@Test
	public void xxhs(){
		
		int  x = 153;
		
		//如何获最高为  百位
		
		int b = x/100;
		int s = x%100/10;
		int g = x%10;
		System.out.println(g);
		
		if((b*b*b + s*s*s + g*g*g)==x){
			System.out.println(x +"是水仙花数...");
		}else{
			System.out.println(x +"不是水仙花数...");
		}
		
	}
	
	
	@Test
	public void xxhs02(){
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入1个整数...");
		int nn  = sc.nextInt();
		sc.close();
		boolean flag = checkNarcissisticNumber(nn);
		
		if(flag){
			System.out.println(nn +"是水仙花数...");
		}else{
			System.out.println(nn +"不是水仙花数...");
		}
	}
	
	
	public boolean checkNarcissisticNumber(int nn){
		boolean flag = false;
		
		//做逻辑判断
		
		//1 先得到这个数的位数
		
		String strNN =String.valueOf(nn);  //1634
		int counter  = strNN.length();
		//2 用水仙花数的算法 判断是否是  3位   他们百位的立方  + 十位的立方 + 各位的立方  = 数身
		
		if(counter<3){
			return flag;
		}
		
		int sum =0;
		
		for(int index =0;index<strNN.length();index++){
			//如何获取String上面的某1位   charAt
			char c = strNN.charAt(index);
			int value =Integer.parseInt(String.valueOf(c));
			System.out.println(value);
			sum  = sum + (int)Math.pow(value, counter);
		}
		
		if(sum == nn){
			flag =true;
		}
		
		return flag;
	}
	
	
	/**
	 * 回文数  例子：  1234321  1221
	 * 判断一个数是否为回文数
	 */
	@Test
	public void palindromeNumber(){
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个整数");
		int num =sc.nextInt();
		sc.close();
		
		//ATL + 向左的箭头
		//boolean result  = checkPalindromeNumber(num);
		boolean result   = checkPalindromeNumber02(num);
		if(result){
			System.out.println(num +"是1个回文数");
		}else{
			System.out.println(num +"不是1个回文数");
		}
	}
	
	@Test
	public void js(){
		String ss = "1234321";
		System.out.println(ss.length()/2);
		
		//substring 包括开始 不包括结尾   结果 = 3-1=2
		System.out.println(ss.substring(0,ss.length()/2));
		System.out.println(ss.substring(ss.length()/2 +1));
		
		String aa ="12344321";
		
		//1234   4321
		System.out.println(aa.substring(0,ss.length()/2 +1));
		System.out.println(aa.substring(ss.length()/2+1));
	}
	
	
	
	/**
	 * 把old 调换过来
	 * @param old
	 * @return
	 */
	public String reverseString(String old){
		StringBuffer sb = new StringBuffer();
		for(int index =old.length()-1; index>=0;index--){
			sb.append(String.valueOf(old.charAt(index)));
		}
		return sb.toString();
	}
	
	
	public boolean checkPalindromeNumber02(int num){
		boolean flag = false;
		
		
		String target = String.valueOf(num);
		int length  = target.length();
		if(length == 1){
			flag = true;
			return flag;
		}else{
			//奇数
			String before = target.substring(0,length/2);
			String after = "";
			if(length %2 ==1){
				after = target.substring(length/2+1);
			}else{
				after  =target.substring(length/2);
			}
			String beforeReverse = reverseString(before);
			if(beforeReverse.equals(after)){
				//说明是回文数
				flag =true;
				return flag;
			}
		}
		return flag;
		
		
	}
	public boolean checkPalindromeNumber(int num){
		
		boolean flag = false;
		
		/*
		 * 判断是否是一个回文数  ?   螺旋上升
		 * 1: 如果是1位数   肯定是
		 * 2: 如果是奇数位   找到中间的那一位 center    
		 * before 从字符串的第0开始 到 center 为止  没有包括 center
		 * after  从字符串的第center开始（没有包括center） 到 最后1位为止
		 * 取反   比较是否相等    123   321  把 123反过来变成 321 看321==321
		 * 
		 * 3: 如果是偶数位   找到中间的那二位 begin end    
		 * before 从字符串的第0开始 到 begin 为止  没有包括 begin
		 * after  从字符串的第end开始（没有包括end） 到 最后1位为止
		 * 取反   比较是否相等    123   321  把 123反过来变成 321 看321==321
		 * 
		 */
		
		String target = String.valueOf(num);
		int length  = target.length();
		if(length == 1){
			flag = true;
			return flag;
		}else if(length%2 ==1){
			//如果是奇数位   
			
			//1 找到中间的那一位 center
			//int center  =  length/2;
			//2 before 从字符串的第0开始 到 center 为止  没有包括 center
			String before = target.substring(0,length/2);
			//3 after  从字符串的第center开始（没有包括center） 到 最后1位为止
			String after = target.substring(length/2+1);
			// 取反
			
			String beforeReverse = reverseString(before);
			
			if(beforeReverse.equals(after)){
				//说明是回文数
				flag =true;
				return flag;
			}
			
		}else{
			//如果是偶数位
			//
			String before =target.substring(0,length/2);
			String after  =target.substring(length/2);
			String beforeReverse = reverseString(before);
			
			if(beforeReverse.equals(after)){
				//说明是回文数
				flag =true;
				return flag;
			}
			
		}
		
		
		
		return flag;
		
	}
	
	
	
	/**
	 * 回文数是面试的时候1个经典的题目 算法
	 * 
	 * 	1234321
	 *  1234321
	 *  
	 *  123586321
	 *  123685321
	 */
	@Test
	public void hws(){
		System.out.println("请输入一个数：");
		Scanner sc = new Scanner(System.in);
		String number = sc.next();
		sc.close();
		boolean flag = true;
		for(int i=0;i<number.trim().length()/2;i++){
			String before =String.valueOf(number.charAt(i));
			String after  =String.valueOf(number.charAt(number.trim().length()-i-1));
		    if(!before.equals(after)){
			    flag = false;
			    break;
		    }
		}
		if(flag){
			System.out.println("它是回文数");
		}else{
		    System.out.println("它不是回文数");
		}
	}
	
	
	/**
	 *  华为：如果能够找到sun apache oracle 方法  已经实现的功能  就不允许 用自己写的方法.... 
	 *  个人写得再好。也有可能有bug 不能达到 完全测试的标准。 不要重复发明轮子。
	 * 
	 */
	@Test
	public void hws02(){
		System.out.println("请输入一个数：");
		Scanner sc = new Scanner(System.in);
		String old = sc.next();
		sc.close();
		StringBuffer sb = new StringBuffer(old);
		String newString = sb.reverse().toString();
		if(old.equals(newString)){
			System.out.println("它是回文数");
		}else{
			System.out.println("它不是回文数");
		}
	}
	
	/**
	 *  面试热点
	 *  
	 *  笔试：  20%作对
	 *  
	 *  原因：在公司的招人中  笔试仅仅只是为了打击你的信心。然后降低你的工资。
	 *  
	 *  决定性作用： 面谈   
	 *  	1：面试的时候一定要直面面试官的眼睛 适当
	 *  	2：面试 忌讳： 90后   反着带个帽子 Tshirt不要太古怪。建议：船灰色的Tshirt
	 *  	      串西装 打领带  皮鞋   搞销售  老总
	 *  	3： 程序猿： 灰色的Tshirt 蓝色的牛仔裤  运动鞋 板鞋  搭
	 *  	4： 正确： 提前10天以上去修头  通过一些去判断你面前的经济能力和可以承受的压力水平 信心
	 *   	5： 追女朋友   欲擒故纵
	 *   	6：声音一定洪亮 最低要让你的面试官听到。
	 *   	7：如果面试官没有打断你，你就一直说。 10分钟。 正面  学生  工资   项目
	 *   	8：见证奇迹的时候到了：  >=40 必然的技能（ 框架 数据库  ）
	 *   	9: 3个工作当中常见的问题： 三板斧  面试失败
	 *   		ok  框架   项目里面具体的细节 目的：通过你面前做的项目是否跟我们现在做的项目匹配。
	 *   		匹配度： springmvc + spring    + mybatis  80%   新 jalor5      教
	 *   			  srping    + hibernate + struts    20%   jalor3  不教
	 *  	10：面试：  8000以上....   9500  10000 11000    浮动1500  信心
	 *  
	 *  	11：5000去上班！！ 
	 *  		马太效应：公司要求的合格的程序员。   
	 *  		深圳：不合格的程序员1文不值。   往往写的代码都是错误的代码。找1个人帮你把这些错误改正。
	 *  		往往花代价 比 让1个合格的人重写。
	 *  
	 *  		6000   8000
	 *  		进入项目： 亚历山大    80%你不会做
	 *  
	 *  		99度的水也不是开水!!  残酷性。
	 *  
	 * 	1：  能被400整除的
	 *  2：  能被4整除但是不能被100整除
	 *  
	 *  只要满足其中的1个条件就OK
	 *  
	 *  要求：　1000  - 3000 有哪些闰年
	 *  
	 */
	@Test
	public void rn(){
		for(int index =1000; index<=3000;index++){
			boolean condtion01 = index%400 ==0;
			boolean condtion02 = index%4 ==0  && index%100 !=0 ;
			if(condtion01 || condtion02){
				System.out.println(index+ "是闰年...");
			}
		}
		
	}

}
